home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Merciful 5
/
Merciful - Disc 5.iso
/
software
/
s
/
suspect
/
suspect&interpreterhd.lha
/
Docs
/
DataFile.txt
< prev
next >
Wrap
Text File
|
1994-05-22
|
9KB
|
282 lines
The InfoTaskForce Guide to the Infocom Data File Structure
==========================================================
Copyright (c) 1992 InfoTaskForce
Type 3 (Standard) Data File.
----------------------------
From: start_of_data_file
To: size of header - 1
Data: Header.
From: size of header
To: common_word_ptr - 1
Data: Common Word Table.
From: common_word_ptr
To: common_word_ptr + ( 3 * 32 * 2 ) ~ ( object_list - 1 )
Data: Common Word Table Index.
This table consists of 3 banks of 32 entries - each entry consists
of a 2 byte page/offset combination giving the start of the "common
word" within the data file. This should be a location in the Common
Word Table.
From: object_list
To: object_list + global_prop_size - 1
Global Property Table.
From: object_list + global_prop_size
To: prop_ptr of Object 1 - 1
Object / Room List.
This starts with Object 0 which is all zeros. Object 1 is actually
the first object.
From: prop_ptr of Object 1
To: global_vars - 1
Data: Object's Property Lists.
Properties within each Object's Propertry List are arranged in
descending order. If a property cannot be found in this list, it is
assumed to be in the Global Property Table.
From: global_vars
To: input_word_buffer - 1
Global Variable Table.
Variable 0 = Current Stack Entry.
Variable 1 - 15 = Local Variables on Z-Machine's Stack.
Variable 16 - 255 = two byte entries in this table.
Note that there may be up to 255 variables. Thus
this table may contain upto 240 entries ($1E0
bytes).
Variable 16 = Current Location.
Variable 17 = Score / Hour.
Variable 18 = No. Moves / Minutes.
From: input_word_buffer
To: input_word_buffer + ( buffer_length * 2 ) - 1
~ ( input_character_buffer - 1 )
Data: Input Routine's Word Buffer.
First byte of the buffer contains the buffer length in words
(including this byte).
From: input_character_buffer
To: input_character_buffer + buffer_length - 1
Data: Input Routine's Character Buffer.
First byte of the buffer contains the buffer length in bytes
(including this byte).
From: input_character_buffer + buffer_length
To: save_bytes - 1
Data: ???
From: save_bytes
To: vocab_ptr - 1
Data: ???
From: vocab_ptr
To: vocab_ptr
Data: Size of "End Of Sentence" (EOS) Character Table.
From: vocab_ptr + 1
To:: vocab_ptr + EOS Table Size
Data: "End Of Sentence" Character Table.
From: vocab_ptr + EOS Table Size + 1
To: vocab_ptr + EOS Table Size + 1
Data: Size of each Vocabulary Table Entry.
From: vocab_ptr + EOS Table Size + 2
To: vocab_ptr + EOS Table Size + 3
Data: Number of Vocabulary Table Entries.
From: vocab_ptr + EOS Table Size + 4
To: resident_bytes - 1
Data: Vocabulary Table.
(vocab_ptr + EOS Table Size + 4 + ( Size of Vocab Entry * Number of
Entries )) * resident_bytes - 1.
From: resident_bytes
To: end of data file
Data: Z-Code.
Note:
-----
* For Type 1 Data Files, there is no Common Word Table or
Common Word Table Index. In this case, object_list * size of
header.
* For Type 2 Data Files, the Common Word Table and Common
Word Table Index are smaller than for Type 3 Data Files. There
is only one bank of 32 entries in the Common Word Table Index.
Here, ( common_word_ptr + ( 1 * 32 * 2 )) * ( object_list - 1 ).
* For Types 1 - 3, global_prop_size = $35.
For Types 4 - 5, global_prop_size = $70.
* The location of the input_word_buffer and the
input_character_buffer can only be found by examining parameters
passed to the input routine.
The Infocom Data File Header.
-----------------------------
/*
** Infocom Game Header Structure.
*/
struct header
{
byte z_code_version ; /* Game's Z-CODE Version Number */
byte mode_bits ; /* Status Bar display indicator */
word release ; /* Game Release Number */
word resident_bytes ; /* No. bytes in the Resident Area */
word start ; /* Offset to Start of Game */
word vocab ; /* Offset to VocabtList */
word object_list ; /* Offset to Object/Room List */
word globals ; /* Offset to Global Variables */
word save_bytes ; /* No. bytes in the Save Game Area */
word script_status ; /* Z-CODE printing modes */
char serial_no[6] ; /* Game's Serial Number */
word common_word ; /* Offset to Common Word List */
word verify_length ; /* No. words in the Game File */
word verify_checksum ; /* Game Checksum - used by Verify */
byte interpreter_number ; /* Number - Set by Interpreter */
byte interpreter_version ; /* ASCII Char - Set by Interpreter */
byte screen_height ; /* Screen Height - Set by Interpreter*/
byte screen_width ; /* Screen Width - Set by Interpreter*/
byte left ; /* Left Coord. - Set by Interpreter */
byte right ; /* Right Coord. - Set by Interpreter */
byte top ; /* Top Coord. - Set by Interpreter */
byte bottom ; /* Bottom Coord. - Set by Interpreter*/
byte max_char_width ; /* Max. Char. Width - Set by Interp. */
byte max_char_height ; /* Max. Char. Height - Set by Interp.*/
word padding1[3] ; /* Blank */
word function_keys ; /* Offset to Function Keys */
word padding2[2] ; /* Blank */
word alternate_alphabet ; /* Offset to Alternate Alphabet */
word mouse_position ; /* Offset to Mouse Position */
word padding3[4] ; /* Blank */
} ;
/*
** Header Information.
**
** The 'z_code_version' byte has the following meaning:
** $00 : Not Used
** $01 : Game compiled for an early version of the interpreter
** $02 : Game compiled for an early version of the interpreter
** $03 : Game compiled for the current 'Standard Series Interp'
** $04 : Game compiled for the current 'Plus Series Interpreter'
** $05 : Game compiled for the current 'Advanced Series Interp'
** $06 : Game compiled for the current 'Graphics Series Interp'
**
** The 'mode_bits' byte performs the following functions:
** Bit 0 : Clear - Standard: Game Data Normal.
** Set - Standard: Game Data Byte Swapped.
** Clear - Advanced: No Colour.
** Set - Advanced: Colour.
** Bit 1 : Clear - Status Bar displays the SCORE.
** Set - Status Bar displays the TIME.
** Bit 2 : Clear - Plus: Normal data space.
** Set - Plus: Data space should be 64K.
** Bit 3 : Clear - Standard: Normal.
** Set - Standard: "Licensed to Tandy Corp" Flag.
** Clear - Plus: Capitalise instead of Underline.
** Set - Plus: Has Underline Capability.
** Bit 4 : Clear - Status Bar Available.
** Set - Status Bar not Available.
** Bit 5 : Clear - Split Screens not Available.
** Set - Split Screens Available.
** Bit 6 : Clear
** Set
** Bit 7 : Clear
** Set
**
** The 'script_status' word is used by Z-CODE to set printing modes
** for use by the interpreter:
** Bit 0 : Clear - Script mode off.
** Set - Script mode on.
** Bit 1 : Clear - Use any type of Font.
** Set - Use a Non-Proportional Font only.
** Bit 3 : Clear - Advanced: No Graphics.
** Set - Advanced: Graphics Available.
** Bit 4 : Clear - Standard: No Sound.
** Set - Standard: Sound Available.
** Clear - Advanced: No Undo.
** Set - Advanced: Undo Available.
** Bit 6 : Clear - Advanced: No Colour.
** Set - Advanced: Colour Available.
** Bit 7 : Clear - Advanced: No Sound.
** Set - Advanced: Sound Available.
** Bit 10 : Clear - Printer OK.
** Set - Printer Error (e.g.: Not Connected ).
*/
/*
** "mode_bits" Bit Definitions:
*/
#define GAME_DATA_NORMAL ((byte)0xFE)
#define GAME_DATA_SWAPPED ((byte)0x01)
#define NO_COLOUR ((byte)0xFE)
#define USE_COLOUR ((byte)0x01)
#define USE_SCORE ((byte)0xFD)
#define USE_TIME ((byte)0x02)
#define NORMAL_DATA ((byte)0xFB)
#define MAXIMUM_DATA ((byte)0x04)
#define NON_TANDY ((byte)0xF7)
#define TANDY ((byte)0x08)
#define CAPITALISE ((byte)0xF7)
#define UNDERLINE ((byte)0x08)
#define STATUS_LINE ((byte)0xEF)
#define NO_STATUS_LINE ((byte)0x10)
#define NO_SCREEN_MODES ((byte)0xDF)
#define SCREEN_MODES ((byte)0x20)
/*
** "script_status" Bit Definitions:
*/
#define SCRIPT_MODE_OFF ((word)0xFFFE)
#define SCRIPT_MODE_ON ((word)0x0001)
#define USE_ANY_FONT ((word)0xFFFD)
#define USE_NON_PROP_FONT ((word)0x0002)
#define NO_REFRESH ((word)0xFFFB)
#define REFRESH ((word)0x0004)
#define VERSION_5_NO_GRAPHICS ((word)0xFFF7)
#define VERSION_5_GRAPHICS ((word)0x0008)
#define VERSION_3_NO_SOUND ((word)0xFFEF)
#define VERSION_3_SOUND ((word)0x0010)
#define VERSION_5_CANT_UNDO ((word)0xFFEF)
#define VERSION_5_CAN_UNDO ((word)0x0010)
#define VERSION_5_NO_COLOUR ((word)0xFFBF)
#define VERSION_5_COLOUR ((word)0x0040)
#define VERSION_5_NO_SOUND ((word)0xFF7F)
#define VERSION_5_SOUND ((word)0x0080)
#define SCRIPT_OK ((word)0xFBFF)
#define SCRIPT_ERROR ((word)0x0400)
/*
** "interpreter_number" Byte Definitions:
*/
#define XZIP ((byte)0x00)
#define DEC_20 ((byte)0x01)
#define APPLE_2E ((byte)0x02)
#define MACINTOSH ((byte)0x03)
#define AMIGA ((byte)0x04)
#define ATARI_ST ((byte)0x05)
#define IBM_MSDOS ((byte)0x06)
#define COMMODORE_128 ((byte)0x07)
#define C64 ((byte)0x08)
#define APPLE_2C ((byte)0x09)
#define APPLE_2GS ((byte)0x0A)
#define TANDY_COLOR ((byte)0x0B)